package com.ht.api.db.metadata;

import java.util.List;

import com.ht.api.db.DbConfig;
import com.ht.api.db.DbList;
import com.ht.api.db.Entity;
import com.ht.api.db.SqlParser;

import lombok.extern.slf4j.Slf4j;

/**
 * 数据库元数据维护工具类
 */
@Slf4j
public class Metadata {
	/**
	 * 复制表结构
	 * @param oldTableCode 要复制的表名
	 * @param newTableCode 复制后的新表名
	 * @param newTableAlias 复制后的新表别名
	 * @param newTableName 复制后的新表备注
	 */
	public static void copyTable(String oldTableCode, String newTableCode, String newTableAlias, String newTableName) {
		TableMetadataManager.create().copyTable(oldTableCode, newTableCode, newTableAlias, newTableName);
		
		// 刷新表字段缓存
		DbConfig.refreshTableMap(newTableCode);
	}
	
	/**
	 * 新增表
	 * @param entity 表的元数据
	 */
	public static void addTable(Entity entity) {
		TableMetadataManager.create().add(entity);
		DbConfig.refreshTableMap(entity.getStr("code"));
	}

	/**
	 * 删除表
	 * @param entity 表的元数据
	 */
	public static void delTable(Entity entity) {
		TableMetadataManager.create().del(entity);
		DbConfig.refreshTableMap(entity.getTable());
	}

	/**
	 * 修改表
	 * @param entity 表的元数据
	 */
	public static void modifyTable(Entity entity) {
		TableMetadataManager.create().modify(entity);
		DbConfig.refreshTableMap(entity.getStr("code"));
	}

	/**
	 * 查询表
	 * @param entity 表的元数据
	 */
	public static DbList findTable(SqlParser sqlParser) {
		return TableMetadataManager.create().find(sqlParser);
	}

	/**
	 * 新增列
	 * @param entity 列的元数据
	 */
	public static void addColumn(Entity entity) {
		ColumnMetadataManager.create().add(entity);
		DbConfig.refreshTableMap(entity.getStr("table_code"));
	}

	/**
	 * 删除列
	 * @param entity 列的元数据
	 */
	public static void delColumn(Entity entity) {
		ColumnMetadataManager.create().del(entity);
		DbConfig.refreshTableMap(entity.getStr("table_code"));
	}

	/**
	 * 修改列
	 * @param entity 列的元数据
	 */
	public static void modifyColumn(Entity entity) {
		ColumnMetadataManager.create().modify(entity);
		DbConfig.refreshTableMap(entity.getStr("table_code"));
	}

	/**
	 * 查询列
	 * @param entity 列的元数据
	 */
	public static DbList findColumn(SqlParser sqlParser) {
		return ColumnMetadataManager.create().find(sqlParser);
	}
	
	/**
	 * 设置主键
	 * @param entity
	 */
	public static List<Entity> setPrimary(Entity entity, boolean enabled) {
		List<Entity> list = TableMetadataManager.create().setPrimary(entity, enabled);
		
		// 刷新表字段缓存
		DbConfig.refreshTableMap(entity.getStr("table_code"));
		
		return list;
	}
}
